{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Linear Regression（回归） for Pumpkins（南瓜） - Lesson 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>City Name</th>\n",
       "      <th>Type</th>\n",
       "      <th>Package</th>\n",
       "      <th>Variety</th>\n",
       "      <th>Sub Variety</th>\n",
       "      <th>Grade</th>\n",
       "      <th>Date</th>\n",
       "      <th>Low Price</th>\n",
       "      <th>High Price</th>\n",
       "      <th>Mostly Low</th>\n",
       "      <th>...</th>\n",
       "      <th>Unit of Sale</th>\n",
       "      <th>Quality</th>\n",
       "      <th>Condition</th>\n",
       "      <th>Appearance</th>\n",
       "      <th>Storage</th>\n",
       "      <th>Crop</th>\n",
       "      <th>Repack</th>\n",
       "      <th>Trans Mode</th>\n",
       "      <th>Unnamed: 24</th>\n",
       "      <th>Unnamed: 25</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>BALTIMORE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1 1/9 bushel cartons</td>\n",
       "      <td>PIE TYPE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9/24/16</td>\n",
       "      <td>15.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>71</th>\n",
       "      <td>BALTIMORE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1 1/9 bushel cartons</td>\n",
       "      <td>PIE TYPE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9/24/16</td>\n",
       "      <td>18.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>72</th>\n",
       "      <td>BALTIMORE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1 1/9 bushel cartons</td>\n",
       "      <td>PIE TYPE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10/1/16</td>\n",
       "      <td>18.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>18.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>BALTIMORE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1 1/9 bushel cartons</td>\n",
       "      <td>PIE TYPE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10/1/16</td>\n",
       "      <td>17.0</td>\n",
       "      <td>17.0</td>\n",
       "      <td>17.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>74</th>\n",
       "      <td>BALTIMORE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1 1/9 bushel cartons</td>\n",
       "      <td>PIE TYPE</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>10/8/16</td>\n",
       "      <td>15.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>N</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "    City Name Type               Package   Variety Sub Variety  Grade  \\\n",
       "70  BALTIMORE  NaN  1 1/9 bushel cartons  PIE TYPE         NaN    NaN   \n",
       "71  BALTIMORE  NaN  1 1/9 bushel cartons  PIE TYPE         NaN    NaN   \n",
       "72  BALTIMORE  NaN  1 1/9 bushel cartons  PIE TYPE         NaN    NaN   \n",
       "73  BALTIMORE  NaN  1 1/9 bushel cartons  PIE TYPE         NaN    NaN   \n",
       "74  BALTIMORE  NaN  1 1/9 bushel cartons  PIE TYPE         NaN    NaN   \n",
       "\n",
       "       Date  Low Price  High Price  Mostly Low  ...  Unit of Sale Quality  \\\n",
       "70  9/24/16       15.0        15.0        15.0  ...           NaN     NaN   \n",
       "71  9/24/16       18.0        18.0        18.0  ...           NaN     NaN   \n",
       "72  10/1/16       18.0        18.0        18.0  ...           NaN     NaN   \n",
       "73  10/1/16       17.0        17.0        17.0  ...           NaN     NaN   \n",
       "74  10/8/16       15.0        15.0        15.0  ...           NaN     NaN   \n",
       "\n",
       "   Condition Appearance Storage  Crop Repack  Trans Mode  Unnamed: 24  \\\n",
       "70       NaN        NaN     NaN   NaN      N         NaN          NaN   \n",
       "71       NaN        NaN     NaN   NaN      N         NaN          NaN   \n",
       "72       NaN        NaN     NaN   NaN      N         NaN          NaN   \n",
       "73       NaN        NaN     NaN   NaN      N         NaN          NaN   \n",
       "74       NaN        NaN     NaN   NaN      N         NaN          NaN   \n",
       "\n",
       "    Unnamed: 25  \n",
       "70          NaN  \n",
       "71          NaN  \n",
       "72          NaN  \n",
       "73          NaN  \n",
       "74          NaN  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "pumpkins = pd.read_csv('../data/US-pumpkins.csv')\n",
    "\n",
    "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n",
    "\n",
    "pumpkins.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这行代码的作用是对 `pumpkins` 数据框进行筛选，保留 `Package` 列中包含 **\"bushel\"** 的行。以下是详细解释：\n",
    "\n",
    "---\n",
    "\n",
    "代码分解：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "1. **`pumpkins['Package']`**:\n",
    "   - 访问 `pumpkins` 数据框中的 `Package` 列。\n",
    "   - 这是一个 Pandas Series，包含每一行的 `Package` 值。\n",
    "\n",
    "2. **`.str.contains('bushel', case=True, regex=True)`**:\n",
    "   - **作用**: 检查 `Package` 列中是否包含字符串 `\"bushel\"`。\n",
    "   - **参数**:\n",
    "     - `'bushel'`: 要匹配的字符串。\n",
    "     - `case=True`: 区分大小写（默认值）。如果设置为 `False`，则忽略大小写。\n",
    "     - `regex=True`: 使用正则表达式匹配（默认值）。如果设置为 `False`，则按字面匹配字符串。\n",
    "   - **返回值**: 一个布尔 Series，表示每一行是否包含 `\"bushel\"`。\n",
    "\n",
    "3. **`pumpkins[...]`**:\n",
    "   - 使用布尔索引对数据框进行筛选。\n",
    "   - 只保留 `Package` 列中包含 `\"bushel\"` 的行。\n",
    "\n",
    "4. **赋值回 `pumpkins`**:\n",
    "   - 将筛选后的数据框重新赋值给 `pumpkins`，更新原数据框。\n",
    "\n",
    "---\n",
    "\n",
    "示例：\n",
    "\n",
    "假设 `US-pumpkins.csv` 的部分数据如下：\n",
    "| Package       | Price  |\n",
    "|---------------|--------|\n",
    "| 1 bushel      | 10.00  |\n",
    "| 2 bushels     | 18.00  |\n",
    "| 1 pound       | 1.50   |\n",
    "| 5 bushels     | 40.00  |\n",
    "\n",
    "执行代码后：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "筛选结果：\n",
    "| Package       | Price  |\n",
    "|---------------|--------|\n",
    "| 1 bushel      | 10.00  |\n",
    "| 2 bushels     | 18.00  |\n",
    "| 5 bushels     | 40.00  |\n",
    "\n",
    "---\n",
    "\n",
    "总结：\n",
    "\n",
    "这行代码的作用是筛选出 `Package` 列中包含 `\"bushel\"` 的行，忽略其他行。  \n",
    "- **`case=True`**: 区分大小写。\n",
    "- **`regex=True`**: 支持正则表达式匹配。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "City Name            0\n",
       "Type               406\n",
       "Package              0\n",
       "Variety              0\n",
       "Sub Variety        167\n",
       "Grade              415\n",
       "Date                 0\n",
       "Low Price            0\n",
       "High Price           0\n",
       "Mostly Low          24\n",
       "Mostly High         24\n",
       "Origin               0\n",
       "Origin District    396\n",
       "Item Size          114\n",
       "Color              145\n",
       "Environment        415\n",
       "Unit of Sale       404\n",
       "Quality            415\n",
       "Condition          415\n",
       "Appearance         415\n",
       "Storage            415\n",
       "Crop               415\n",
       "Repack               0\n",
       "Trans Mode         415\n",
       "Unnamed: 24        415\n",
       "Unnamed: 25        391\n",
       "dtype: int64"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pumpkins.isnull().sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`pumpkins.isnull().sum()` 的作用是检查 `pumpkins` 数据框中每一列的缺失值（`NaN`）数量，并返回一个包含每列缺失值数量的 Pandas Series。\n",
    "\n",
    "---\n",
    "\n",
    "代码分解：\n",
    "1. **`pumpkins.isnull()`**:\n",
    "   - 检查 `pumpkins` 数据框中每个元素是否为缺失值（`NaN`）。\n",
    "   - 返回一个与 `pumpkins` 数据框形状相同的布尔数据框，其中：\n",
    "     - `True` 表示该位置的值是缺失值。\n",
    "     - `False` 表示该位置的值不是缺失值。\n",
    "\n",
    "2. **`.sum()`**:\n",
    "   - 对布尔数据框按列求和。\n",
    "   - 在布尔值中，`True` 被视为 `1`，`False` 被视为 `0`。\n",
    "   - 因此，`.sum()` 会计算每列中 `True` 的数量，即每列中缺失值的总数。\n",
    "\n",
    "---\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      Month               Package  Low Price  High Price   Price\n",
      "70        9  1 1/9 bushel cartons      15.00        15.0  15.000\n",
      "71        9  1 1/9 bushel cartons      18.00        18.0  18.000\n",
      "72       10  1 1/9 bushel cartons      18.00        18.0  18.000\n",
      "73       10  1 1/9 bushel cartons      17.00        17.0  17.000\n",
      "74       10  1 1/9 bushel cartons      15.00        15.0  15.000\n",
      "...     ...                   ...        ...         ...     ...\n",
      "1738      9    1/2 bushel cartons      15.00        15.0  15.000\n",
      "1739      9    1/2 bushel cartons      13.75        15.0  14.375\n",
      "1740      9    1/2 bushel cartons      10.75        15.0  12.875\n",
      "1741      9    1/2 bushel cartons      12.00        12.0  12.000\n",
      "1742      9    1/2 bushel cartons      12.00        12.0  12.000\n",
      "\n",
      "[415 rows x 5 columns]\n",
      "70      15.0\n",
      "71      18.0\n",
      "72      18.0\n",
      "73      17.0\n",
      "74      15.0\n",
      "        ... \n",
      "1626    12.0\n",
      "1627    12.0\n",
      "1628    19.0\n",
      "1629    18.0\n",
      "1630    20.0\n",
      "Name: Price, Length: 134, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# A set of new columns for a new dataframe. Filter out nonmatching columns 筛选指定的列\n",
    "columns_to_select = ['Package', 'Low Price', 'High Price', 'Date']\n",
    "pumpkins = pumpkins.loc[:, columns_to_select]\n",
    "\n",
    "# Get an average between low and high price for the base pumpkin price\n",
    "price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2\n",
    "\n",
    "# Convert the date to its month only\n",
    "month = pd.DatetimeIndex(pumpkins['Date']).month\n",
    "\n",
    "# Create a new dataframe with this basic data\n",
    "new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})\n",
    "print(new_pumpkins)\n",
    "# Convert the price if the Package contains fractional bushel values\n",
    "\n",
    "# 将满足条件的列 赋值为 price/(1+1/9)\n",
    "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9)\n",
    "\n",
    "# 将满足条件的列 赋值为 price/(1/2)\n",
    "new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)\n",
    "\n",
    "# print(new_pumpkins)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "price = new_pumpkins.Price\n",
    "month = new_pumpkins.Month\n",
    "plt.scatter(price, month)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Pumpkin Price')"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAG0CAYAAAAozc0BAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIQZJREFUeJzt3QmUVfV9B/AfmwOyisoyMgYBjVHEGGOIYkTQSiRViTSLVSNBTfSgFqkbqUvcikutZDHknKhQayxZRBM14kIVgmIMEOTYpooIFQNoBGEAlXV67j2dOYyACszMu/+Zz+ece95799735udcnPnO//6XZlVVVVUBAJCg5qUuAABgVwkyAECyBBkAIFmCDACQLEEGAEiWIAMAJEuQAQCS1TIauS1btsTSpUujffv20axZs1KXAwB8Atk0d2vWrIny8vJo3rx50w0yWYipqKgodRkAwC5YsmRJ9OjRo+kGmawlpvob0aFDh1KXAwB8ApWVlXlDRPXv8SYbZKpvJ2UhRpABgLR8XLcQnX0BgGQJMgBAsgQZACBZggwAkCxBBgBIliADACRLkAEAkiXIAADJEmQAgGQJMgBAsgQZACBZggwAkCxBBgBIliADACRLkAEAktWy1AVAXet51WPRGCy+5SulLgGg8LTIAADJ0iID1ButY0B90yIDACRLkAEAkiXIAADJEmQAgGQJMgBAsgQZACBZggwAkCxBBgBIliADACRLkAEAkiXIAADJEmQAgGQJMgBAsgQZACBZggwAkCxBBgBIliADACRLkAEAkiXIAADJEmQAgGQJMgBAsgQZACBZggwAkCxBBgBIliADACRLkAEAkiXIAADJEmQAgGQJMgBAsgQZACBZggwAkCxBBgBIliADACRLkAEAkiXIAADJEmQAgGQJMgBAskoaZMaNGxdHHXVUtG/fPrp06RLDhg2LV155pdY5xx9/fDRr1qzWdsEFF5SsZgCgOEoaZKZPnx6jRo2KF154IZ566qnYuHFjnHTSSbFu3bpa551//vmxbNmymu22224rWc0AQHG0LOUXnzp1aq3XkyZNyltm5syZE8cdd1zN/j333DO6detWggoBgCIraZD5sNWrV+ePnTt3rrX/5z//edx///15mDnllFPimmuuycPN9qxfvz7fqlVWVtZz1QDF1/Oqx6IxWHzLV0pdAgVTmCCzZcuWGD16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sGFDfPrTn46WLXdrPj0AgIbpI7No0aJ82PXBBx+cP/bu3Ttmz569e18dAKAhgszll18emzZtivvvvz9+/etfR48ePeK73/3u7nxtAIDd8onvDc2cOTMPMMcee2z++otf/GIeZtatWxdt27bdvSoAAOqzRebtt9+OAw88sOZ19+7d85Wvs/0AAIVukcmGVq9duzYPL9WaN28ea9asqTV/TIcOHeq+SgCA3Qky2Yilgw46aJt92WrY1c/NIwMAFDLImD8GAEg2yAwcOLB+KwEAqO+1lgAAikKQAQCSJcgAAMkSZACAZAkyAECydnr56mxJgltuuSWmTZuWz+q7ZcuWWsdff/31uqwPAKDugsx5550X06dPj7PPPjtfpiCbBA8AIIkg8/jjj8djjz0WAwYMqJ+KAADqK8jstdde0blz5519GwDw/3pe9VikbvEtX4kkO/veeOONce2118Z777232198xowZccopp0R5eXl+i+rhhx+udXzEiBH5/q23L3/5y7v9dQGAJtoic8cdd8TChQuja9eu0bNnz2jVqlWt43Pnzt2pjsOHH354jBw5Mk4//fTtnpMFl4kTJ9a8Lisr29mSAYBGaqeDzLBhw+rsi5988sn59lGy4NKtW7c6+5oAQBMOMtddd100pGeffTa6dOmS980ZPHhw3HTTTbH33nvv8Pz169fnW7XKysoGqhQAaGiFnhAvu61033335XPW3Hrrrfmw76wFZ/PmzTt8z7hx46Jjx441W0VFRYPWDAAUrEUmG6X06quvxj777JO3jHzU3DErV66ss+K++c1v1jw/7LDDol+/ftG7d++8leaEE07Y7nvGjh0bY8aMqdUiI8wAQBMOMnfeeWe0b9++5nmpJsHr1atXHqZee+21HQaZrE+NDsEA0DR8oiBzzjnn1BoSvSPvv/9+1Kc333wzVqxYkc8oDACw031kLrnkkh0OpR46dOhOfdbatWtj3rx5+ZZZtGhR/vyNN97Ij11++eXxwgsvxOLFi/N+Mqeddlr06dMnhgwZsrNlAwCN0E4HmWx5gg+PXMpCTNYxd9OmTTv1WbNnz44jjjgi3zJZ35bseTbhXosWLWL+/Plx6qmnxkEHHRTnnntuHHnkkfH73//erSMAYNeGXz/55JPxpS99Ke/0O3r06FizZk3eQtKyZct8Haadcfzxx0dVVdUOjz/xxBM7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FbpFJpPdJjrnnHPi85//fHzhC1+I8ePHx7p16/JRTABA01b4IPONb3wj/vrXv8a1114by5cvj89+9rMxderUbToAN3bZ7bJsLp0P3zaj4bkWxeFaFIdrURxlTexaNKv6uHFNAAAFVeg+MgAAH0WQAQCSJcgAAMkSZACAZAkyAECyCj/8Gkpt2bJlMWHChJg5c2b+PFu4tFevXjFs2LAYMWJEPvs0AKWhRaagfvzjH8e3vvWtmDx5cv763//93+OQQw6Jgw8+OL73ve/Fpk2bSl1ikzB79uz4zGc+E7/73e9i48aNsWDBgny26bZt28Zll10Wxx13XL4WCAClIcgU0E033ZSHlffeey8uvfTSuPXWW/PHM888M5/l+O67744bb7yx1GU2CaNHj86/91mg+f3vfx+TJk2KV199NQ+Yr7/+en6Nrr766lKX2WRs2LAhfvnLX+bX5Iwzzsi37PmvfvWr/BjFka2Jd8MNN5S6jCblzTffjLVr126zP/sjbMaMGdFoZRPiUSy9e/euevDBB/Pn8+bNq2rRokXV/fffX3N8ypQpVX369ClhhU1HmzZtqhYuXFjzevPmzVWtWrWqWr58ef76ySefrCovLy9hhU3HggULqnr16lXVunXrqoEDB1Z9/etfz7fsebYv+38iO4diyH52NW/evNRlNAlLly6tOuqoo/Lvd/b74uyzz65as2ZNzfHs51Vjvhb6yBTQ0qVL87WlMocffnjeJyNbmqHa5z73ufwc6l+XLl3yfjFZn5jqvzKz23rVK8oeeOCBsXLlyhJX2TRceOGFcdhhh8Wf/vSnbVb0rayszG/Fjho1Kp544omS1diUzJ8//yOPv/LKKw1WS1N31VVX5b8n/vCHP8SqVavy14MGDYonn3wy9tprr/ycxjyJvyBTQN26dYv//u//jv333z/vk7F58+b89aGHHpof/6//+q/8Fyz1L+vQe8EFF8Ttt9+er1uS3dIbOHBgtGnTpuaH9X777VfqMpuE5557Ll588cVtQkwm25ddm/79+5ektqYo++OqWbNm2/0FWb0/e6T+Pf300/HQQw/V/AGc/b/yta99LQYPHhzTpk3L9zXmayHIFFDWFyb76/K0007L/xFeccUVecfSFStW5P8Yb7755vi7v/u7UpfZZPorZS0yp5xySh4ojz766Lj//vtrjmfXY9y4cSWtsano1KlTLF68OPr27bvd49mx7BwaRufOneO2226LE044YbvHsz+4sv9vqH+rV6+uaXnJZH90TZkyJQ8zWcvM1j+zGiNBpoCuv/76/C/+WbNmxfnnn583E2a3mLJAk3UuzX446OzbMNq1axe/+MUv4oMPPshvKWWvt3bSSSeVrLam5rzzzssD/jXXXJP/8uzatWvN7b4s8Geh8+KLLy51mU1GNnovu8X9qU99arvHs1scjfl2RpH06tUrv9WX3equ1rJly7wTfBZm/vZv/zYaM6tfA8nIRvD94Ac/iOXLl9c0lWc/wrLbsdkIsyzs0zCyWxnr1q2Ls846a7vH33333fjtb3+bj7Skfl155ZUxb9687fYPy/4AGz58eDzyyCOxZcuWaIwEGSA5ixYtysNMJgsxBxxwQKlLgpLZtGlT3lq/vf5j1cf/8pe/7LD1LHXmkQGSkwWXrL9StlWHmCVLlsTIkSNLXRr/z/VoOC1bttxhiMlk/fyyLguNlRYZoFF46aWX8qkJsk7ZlJ7rURwvNfJrobMvkISsv8VHyWZapuG4HsXx2yZ+LbTIAEnIJvza0bwl1bLjjfWvzqJxPYqjeRO/FvrIAEno3r17PjdGNvJie9vcuXNLXWKT4noUR/cmfi0EGSCZeUvmzJmzw+Mf9xcpdcv1KI4jm/i10EcGSMLll1+ez1uyI3369IlnnnmmQWtqylyP4mjq10IfGQAgWW4tAQDJEmQAgGQJMgBAsgQZACBZggzQJGVDUh9++OFSlwHsJkEGaFAjRozIQ8QFF1ywzbFRo0blx7Jz6sr3v//9+OxnP1tnnwcUiyADNLiKioqYPHlyvP/++zX7Pvjgg3jggQdi//33L2ltQFoEGaDBZSvxZmEmm1a9WvY8CzFHHHFEzb7169fHJZdcEl26dInWrVvHscceG3/84x9rjj/77LN5C860adPi85//fOy5555xzDHHxCuvvJIfnzRpUlx//fX56r/ZedmW7av2zjvvxFe/+tX8fQceeODHLr4HFI8gA5TEyJEjY+LEiTWv77333vj2t79d65wrrrgiHnzwwfi3f/u3fL2YbIbSIUOGxMqVK2ud90//9E9xxx13xOzZs6Nly5b5Z2e+8Y1vxD/+4z/GoYceGsuWLcu3bF+1LOR8/etfj/nz58fQoUPjzDPP3OazgWITZICSOOuss2LmzJnxv//7v/n23HPP5fuqZVOuT5gwIW6//fY4+eST45BDDomf/exn0aZNm7jnnntqfdbNN98cAwcOzM+56qqr4vnnn89vVWXntmvXLg833bp1y7dsX7WsL84ZZ5yRB6R//ud/jrVr18aLL77YoN8HYPdYawkoiX333Te+8pWv5Ld6spVSsuf77LNPzfGFCxfGxo0bY8CAATX7WrVqFV/4whfiz3/+c63P6tevX62VgDNvv/32x/a32fp9bdu2jQ4dOuTvA9IhyAAlk90Cuuiii/Lnd9111y5/ThZwqmX9YDJbtmzZqfdVv/eTvA8oDreWgJL58pe/HBs2bMhbXrK+L1vr3bt37LHHHvktp2rZeVln3+wW0ieVfcbmzZvrtG6gOLTIACXTokWLmttE2fOtZbd6Lrzwwrj88sujc+fO+W2i2267Ld57770499xzP/HX6NmzZyxatCjmzZsXPXr0iPbt20dZWVmd/7cApSHIACWV9UvZkVtuuSW/1XP22WfHmjVr8iHWTzzxROy1116f+POHDx+eD+0eNGhQrFq1Kh8pVZcT7gGl1awq62UHAJAgfWQAgGQJMgBAsgQZACBZggwAkCxBBgBIliADACRLkAEAkiXIAADJEmQAgGQJMgBAsgQZACBS9X/BuMI4CdcILgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')\n",
    "plt.ylabel(\"Pumpkin Price\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这段代码的作用是对 `new_pumpkins` 数据框中的 `Price` 列按 `Month` 分组，计算每个月的平均价格，并将结果绘制为柱状图（bar chart）。以下是详细解释：\n",
    "\n",
    "---\n",
    "\n",
    "### 代码分解：\n",
    "\n",
    "#### 1. **`new_pumpkins.groupby(['Month'])`**\n",
    "   - **作用**: 按 `Month` 列对数据进行分组。\n",
    "   - **结果**: 返回一个分组对象（`GroupBy` 对象），可以对每个分组进行聚合操作。\n",
    "\n",
    "#### 2. **`['Price']`**\n",
    "   - **作用**: 从分组对象中选择 `Price` 列。\n",
    "   - **结果**: 返回一个分组后的 `Price` 列数据。\n",
    "\n",
    "#### 3. **`.mean()`**\n",
    "   - **作用**: 对每个分组的 `Price` 列计算平均值。\n",
    "   - **结果**: 返回一个新的 Pandas Series，其中索引是 `Month`，值是每个月的平均价格。\n",
    "\n",
    "#### 4. **`.plot(kind='bar')`**\n",
    "   - **作用**: 将分组后的平均价格绘制为柱状图。\n",
    "   - **参数**:\n",
    "     - `kind='bar'`: 指定图表类型为柱状图（bar chart）。\n",
    "   - **结果**: 绘制一个柱状图，其中 X 轴是 `Month`，Y 轴是每个月的平均价格。\n",
    "\n",
    "#### 5. **`plt.ylabel(\"Pumpkin Price\")`**\n",
    "   - **作用**: 设置 Y 轴的标签为 `\"Pumpkin Price\"`，表示 Y 轴的含义是南瓜的价格。\n",
    "\n",
    "---\n",
    "\n",
    "### 示例：\n",
    "假设 `new_pumpkins` 数据框如下：\n",
    "| Month | Package       | Low Price | High Price | Price  |\n",
    "|-------|---------------|-----------|------------|--------|\n",
    "| 10    | 1 bushel      | 10.00     | 15.00      | 12.50  |\n",
    "| 10    | 1 1/9 bushel  | 20.00     | 25.00      | 20.25  |\n",
    "| 11    | 1/2 bushel    | 5.00      | 7.00       | 12.00  |\n",
    "| 11    | 1 bushel      | 15.00     | 20.00      | 17.50  |\n",
    "\n",
    "执行代码：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar')\n",
    "plt.ylabel(\"Pumpkin Price\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "#### 结果：\n",
    "- **分组计算**:\n",
    "  - `Month = 10`: 平均价格 = `(12.50 + 20.25) / 2 = 16.375`\n",
    "  - `Month = 11`: 平均价格 = `(12.00 + 17.50) / 2 = 14.75`\n",
    "\n",
    "- **绘制柱状图**:\n",
    "  - X 轴：`Month`（10 和 11）。\n",
    "  - Y 轴：每个月的平均价格（16.375 和 14.75）。\n",
    "  - 柱状图显示每个月的平均南瓜价格。\n",
    "\n",
    "---\n",
    "\n",
    "### 总结：\n",
    "1. **`groupby`**: 按 `Month` 分组。\n",
    "2. **`mean()`**: 计算每组的平均价格。\n",
    "3. **`plot(kind='bar')`**: 绘制柱状图。\n",
    "4. **`plt.ylabel()`**: 设置 Y 轴标签。\n",
    "5. 官网：[https://matplotlib.org/stable/tutorials/index.html](https://matplotlib.org/stable/tutorials/index.html)\n",
    "\n",
    "这段代码的最终效果是展示每个月的南瓜平均价格，便于直观比较不同月份的价格变化。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  },
  "metadata": {
   "interpreter": {
    "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d"
   }
  },
  "orig_nbformat": 2
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
